# -*- coding:utf-8 -*-

from sqlalchemy import Column, String, Integer, BigInteger, DECIMAL, DateTime, Boolean, Text, Index
from datetime import datetime
from config.database import Base, BaseMixin


class SearchRecord(Base, BaseMixin):
    """
    搜索记录表 - 用于记录商品搜索结果，判断新商品
    ✅ 支持多用户隔离：每个用户维护自己的搜索结果
    ✅ 限制每个关键词的记录数（40-50条），避免表无限增长
    """
    __tablename__ = "search_record"
    
    id = Column(BigInteger, primary_key=True, autoincrement=True, comment='主键ID')
    item_id = Column(String(100), nullable=False, comment='商品ID')  # ✅ 移除unique约束，因为不同用户可能有相同的商品ID
    title = Column(Text, nullable=True, comment='商品标题')  # ✅ 使用TEXT类型，支持任意长度的标题
    price = Column(DECIMAL(10, 2), nullable=True, comment='价格')
    seller_id = Column(String(100), nullable=True, comment='卖家ID')
    seller_nick = Column(String(200), nullable=True, comment='卖家昵称')
    location = Column(String(200), nullable=True, comment='所在地')
    publish_time = Column(BigInteger, nullable=True, comment='发布时间（时间戳）')
    position = Column(Integer, nullable=True, comment='搜索位置')
    image_url = Column(String(500), nullable=True, comment='图片URL')
    tag_name = Column(String(200), nullable=True, comment='商品标签（包邮/极好等）')
    search_keyword = Column(String(200), nullable=True, comment='搜索关键词')
    first_found_time = Column(DateTime, nullable=True, default=datetime.now, comment='首次发现时间')
    last_found_time = Column(DateTime, nullable=True, default=datetime.now, onupdate=datetime.now, comment='最后发现时间')
    is_new = Column(Boolean, nullable=True, default=True, comment='是否新商品')
    # ✅ create_by, dept_id, create_time, update_time, del_flag 由 BaseMixin 提供
    # ✅ 添加唯一索引：item_id + create_by + search_keyword（同一用户同一关键词不能有重复的商品ID）
    __table_args__ = (
        Index('idx_user_keyword_item', 'create_by', 'search_keyword', 'item_id', unique=True),
    )

